package Construibles;

import java.util.ArrayList;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

import Juego.Jugador;
import MapaStuff.SuperficieAgua;
import MapaStuff.SuperficiePlana;
import RedStuff.ClienteElectrico;
import RedStuff.ConectorElectrico;
import RedStuff.FuenteElectrica;
import RedStuff.RedElectrica;

public abstract class Zona extends ConectorUniversal implements ClienteElectrico,ConectorElectrico{

	protected  int consumoElectrico;
	protected boolean luz;
	protected boolean luzTurnoAnterior;

	public Zona() {
		super();
		luz=false;
		consumoElectrico=1;
	}
	
	public void daniar(int danio){
		super.daniar(danio);
		if(estaDestruido){
			luz=luzTurnoAnterior=false;
		}
	}
	
	public boolean luzTurnoAnterior(){
		return luzTurnoAnterior;
	}
	
	protected boolean sePuedeConectarAvecino(ConectorElectrico conector){
		return conector.sePuedeConectar((ConectorElectrico)this);
	}
	
	public boolean sePuedeConectar(ConectorElectrico conector){
		return conector.sePuedeConectar((ClienteElectrico)this);
	}
	
	public boolean sePuedeConectar(FuenteElectrica fuente) {
		return false;
	}
	
	public boolean sePuedeConectar(ClienteElectrico cliente) {
		return false;
	}
	
	
	public void conectarConVecinosYDevolverClientes(RedElectrica red,ArrayList<ClienteElectrico> clientes){
		super.conectarConVecinosYDevolverClientes(red, clientes,true);
	}
	
	public int consumirPotencia(int potencia){
		
		if(luz==true || estaDestruido==true){
			return potencia;
		}
		if(potencia<consumoElectrico){
			luz=false;
			return 0;
		}
		potencia=potencia-consumoElectrico;
		luz=true;
		return potencia;
	}
		
		
	public boolean sePuedeConstruirEn (SuperficieAgua agua){
		return false;
	}
	
	@Override
	public boolean sePuedeConstruirEn (SuperficiePlana plana){
		return true;
	}
	
	
	@Override
	public void agregarseARedes(Jugador jugador) {
		jugador.agregarARedElectrica((ClienteElectrico)this);
		
	}
	
	public Element serializar(Document doc){
		Element eleZona=super.serializar(doc);
		eleZona.setAttribute("luz",Boolean.toString(luz));
		eleZona.setAttribute("luzTurnoAnterior",Boolean.toString(luzTurnoAnterior));
		return eleZona;
	}
	
	protected static void hiratarElementosHeredados(Zona zona,Node nod){
		hiratarElementosHeredados((ConstruibleFisico)zona,nod);
		Element eleZona=(Element)nod;
		zona.luz=Boolean.parseBoolean(eleZona.getAttribute("luz"));
		zona.luzTurnoAnterior=Boolean.parseBoolean(eleZona.getAttribute("luzTurnoAnterior"));
	}
	
	@Override
	public void desconectarseRedes(Jugador jugador) {
		jugador.removerDeRedElectrica((ClienteElectrico)this);
	}
	
}
